# -*- coding: utf-8 -*-
"""
跨平台兼容工具函数
用于处理Windows/macOS/Linux平台差异
"""
import os
import platform
import tempfile
from pathlib import Path


def get_project_root():
    """
    获取项目根目录路径

    Returns:
        str: 项目根目录的绝对路径
    """
    # 从当前文件所在位置向上查找项目根目录
    current_dir = Path(__file__).parent.parent
    return str(current_dir.resolve())


def get_cache_dir():
    """
    获取跨平台兼容的缓存目录路径

    Returns:
        str: 缓存目录的绝对路径
    """
    project_root = get_project_root()
    cache_dir = os.path.join(project_root, '.cache')

    # 确保缓存目录存在
    os.makedirs(cache_dir, exist_ok=True)

    return cache_dir


def suppress_output():
    """
    获取跨平台的输出抑制命令后缀

    Returns:
        str: 适合当前平台的输出抑制字符串
    """
    system = platform.system()
    if system == "Windows":
        return " > nul 2>&1"
    else:
        return " > /dev/null 2>&1"


def get_platform_specific_command(base_command, args=None):
    """
    根据平台生成适当的命令

    Args:
        base_command (str): 基础命令
        args (list, optional): 命令参数列表

    Returns:
        str: 完整的平台特定命令
    """
    system = platform.system()

    if args is None:
        args = []

    # Windows和Unix系统使用不同的路径分隔符
    if system == "Windows":
        # 在Windows上可能需要处理路径中的空格和特殊字符
        full_command = base_command
        for arg in args:
            if ' ' in arg:
                arg = f'"{arg}"'
            full_command += f" {arg}"
        return full_command
    else:
        # Unix/Linux/macOS
        return f"{base_command} {' '.join(args)}"


def get_venv_activate_command(venv_name="venv_funasr"):
    """
    获取适合当前平台的虚拟环境激活命令

    Args:
        venv_name (str): 虚拟环境目录名称

    Returns:
        str: 激活虚拟环境的命令
    """
    system = platform.system()
    if system == "Windows":
        return f"{venv_name}\\Scripts\\activate"
    else:
        return f"source {venv_name}/bin/activate"


def ensure_directory_exists(directory_path):
    """
    确保目录存在，如果不存在则创建

    Args:
        directory_path (str): 目录路径
    """
    os.makedirs(directory_path, exist_ok=True)


def normalize_path(path):
    """
    规范化路径，使其适合当前平台

    Args:
        path (str): 要规范化的路径

    Returns:
        str: 规范化后的路径
    """
    return os.path.normpath(path)


def get_temp_dir():
    """
    获取平台特定的临时目录

    Returns:
        str: 临时目录路径
    """
    return tempfile.gettempdir()


def is_windows():
    """
    检查当前是否为Windows系统

    Returns:
        bool: 是否为Windows系统
    """
    return platform.system() == "Windows"


def is_macos():
    """
    检查当前是否为macOS系统

    Returns:
        bool: 是否为macOS系统
    """
    return platform.system() == "Darwin"


def is_linux():
    """
    检查当前是否为Linux系统

    Returns:
        bool: 是否为Linux系统
    """
    return platform.system() == "Linux"


# 示例用法
if __name__ == "__main__":
    print(f"项目根目录: {get_project_root()}")
    print(f"缓存目录: {get_cache_dir()}")
    print(f"输出抑制: {suppress_output()}")
    print(f"虚拟环境激活命令: {get_venv_activate_command()}")
    print(f"当前系统: {platform.system()}")
    print(f"是否为Windows: {is_windows()}")
    print(f"是否为macOS: {is_macos()}")
    print(f"是否为Linux: {is_linux()}")